2.4 frontend_server

在 Flutter 中,Debug 模式以 JIT 模式运行,在 Debug 模式下,同样需要使用 CFE,将源代码转化为 Kernel AST。

在 Flutter SDK 中,有一个持久进程 frontend_server,它本质上是 CFE 和一些 Flutter 特定的内核到内核转换的薄包装器。

frontend_server 将 Dart 源代码编译为内核文件,然后 flutter 工具将其发送到设备。当开发人员请求热重载时, frontend_server 过程的持久性就会发挥作用:在这种情况下, frontend_server 可以重用先前编译中的 CFE 状态,并仅重新编译实际更改的库。

整体流程如下图所示:

Pasted image 20240725163405.png

在 Flutter 语境下,开发环境与运行环境经常为不同的设备,如在电脑上开发,在手机上运行,因此以 HOST 与 DEVICE 区分。

在开发时,开发者通过 flutter_toolrun 命令运行 Flutter 应用,该命令会在内部调用 CFE(fronted_server),将 Dart 代码编译为 Kernel AST。

同时,fronted_server 是持久化运行的,因此它是有状态的并且有之前编译的结果。这会检测开发人员发出的热重载请求,重用之前的编译结果,并仅重新编译差异。

对于热重载场景来说,我们修改的 Dart 代码是由 frontend_server (CFE) 动态检测的,并在生成差异二进制文件后,将更改分发到 VM 上,给我们带来立即看到更改反映的体验。


本文作者:Maeiee

本文链接:2.4 frontend_server

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!